<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>README</title><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
  .CodeMirror-sizer { margin-left: 0px !important; }
  .CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  .typora-export #write { break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none 0s ease 0s; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }
@media print {
  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignobject { font-size: var(--mermaid-font-zoom); }


.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background: inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right: 1px solid rgb(221, 221, 221); background: inherit; white-space: nowrap; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background: inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background: inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 30px; z-index: 3; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: 0px 0px !important; border: none !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-radius: 0px; border-width: 0px; background: 0px 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; overflow-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; }
.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right: 30px solid transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right: none; width: auto; }
.CodeMirror-linebackground { position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background: rgba(255, 255, 0, 0.4); }
@media print {
  .CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}

@font-face{font-family:"iconfont";src:url('iconfont.woff2')}
@font-face{font-family:"iconfont";src:url('file:///C://Users//Administrator//AppData//Roaming//Typora/themes/source/dy/iconfont.woff2') format('woff2'),url('file:///C://Users//Administrator//AppData//Roaming//Typora/themes/source/dy/iconfont.woff') format('woff'),url('file:///C://Users//Administrator//AppData//Roaming//Typora/themes/source/dy/iconfont.ttf') format('truetype');}.iconfont{font-family:"iconfont" !important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.icon-info2:before{content:"\e746";}.icon-093info:before{content:"\e664";}.icon-institueinfo:before{content:"\e613";}.icon-fengshan:before{content:"\e600";}.icon-fengshan1:before{content:"\e6cc";}.icon-a-28tongfengfengshan:before{content:"\e604";}.icon-a-28atongfengfengshan:before{content:"\e605";}.icon-weibiaoti-:before{content:"\e689";}.icon-fengche2:before{content:"\e625";}
/* cyrillic-ext */
/* cyrillic */
/* greek-ext */
/* greek */
/* vietnamese */
/* latin-ext */
/* latin */
/* cyrillic-ext */
/* cyrillic */
/* greek-ext */
/* greek */
/* vietnamese */
/* latin-ext */
/* latin */
/* cyrillic-ext */
/* cyrillic */
/* greek-ext */
/* greek */
/* vietnamese */
/* latin-ext */
/* latin */
@font-face {
  font-family: 'Source Sans Pro';
  font-style: normal;
  font-weight: 600;
  src: local('Source Sans Pro SemiBold'), local('SourceSansPro-SemiBold'),
    url('file:///C://Users//Administrator//AppData//Roaming//Typora/themes/source/zj/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F,
    U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}@import '';
@import '';


html {
    font-size: 17px;
}

body {
    font-family: var(--body-font);
    color: var(--body-color);
    -webkit-font-smoothing: antialiased;
    line-height: 1.8rem;
    letter-spacing: 0;
    margin: 0;
    overflow-x: hidden;
    text-align: justify;
    text-justify: inter-ideograph;
}

.window * {
    color: var(--body-color) !important;
}
.nav-group-item.active {
    color: black !important;
}

.typora-sourceview-on #toggle-sourceview-btn {
    color: black;
}
#sidebar-files-menu li a {
    color: var(--body-color) !important;
}
#file-library-search-panel input {
    color: var(--para-color) !important;
}
#sidebar-loading-template {
    background-color: var(--bg-color) !important;
}

#write {
    /*max-width: 860px;*/
    max-width: 1200px;
    margin: 0 auto;
    padding: 20px 30px 160px;
}

/*
content {
    background-color: var(--bg-color) !important;
}
*/


/* 人物背景图片（右下角显示） */


@media only screen and (min-width: 1800px){
    content {
        background: var(--bgimg-url) no-repeat;
        background-size : 12%;
        background-position: 86% 100%;
    }
    /*效仿https://github.com/Soanguy/typora-theme-autumnus，取消下面注释，并注释上面（content）即可，换个背景（透明）风格*/
    /*content {
        background: var(--bgimg-url) no-repeat;
        background-size : 30%;
        background-position: center 10%;
    }
    #write {
        backdrop-filter: blur(15px);
        max-width: 950px;
        padding: 50px;
        border: 1px dashed #d0d5d7;
        border-radius: 4px;
        margin: 470px auto 20px;
    }
    #write *:not(font,span) {
        background: transparent !important;
    }
    #write table *, #write blockquote, #write pre, #write details, #write details * {
        background: transparent !important;
    }
    #write details, #write details summary {
        border-color: #d0d5d7 !important;
    }*/
}
content #md-searchpanel {
    background: var(--bg-color);
}

/*
@media only screen and (min-width: 1400px) {
	#write {
		max-width: 1024px;
	}
}

@media only screen and (min-width: 1800px) {
	#write {
		max-width: 1200px;
	}
}
*/

::-webkit-scrollbar-thumb {
  background: var(--scrollbar-color) !important;
  background-clip: padding-box;
}

#write p {
    line-height: 1.8rem;
    word-spacing: .05rem;
    color: var(--para-color);
}

#write>ul:first-child,
#write>ol:first-child {
    margin-top: 30px;
}

body>*:first-child {
    margin-top: 0 !important;
}

body>*:last-child {
    margin-bottom: 0 !important;
}

.mathjax-block:hover .md-rawblock-container,
.mathjax-block:hover .md-rawblock-tooltip,
.md-htmlblock:hover .md-rawblock-container,
.md-htmlblock:hover .md-rawblock-tooltip {
    background-color: var(--bg-color);
    -webkit-animation: none;
    animation: none;
}

.mathjax-block .md-rawblock-control, .md-htmlblock .md-rawblock-control {
    color: var(--para-color);
    background-color: var(--codeblockbg-color);
}


/** 超链接 **/


#write a {
    border-bottom:2px solid var(--abottom-color);
    padding: 0 4px;
    /*padding-top: 2px;*/
    transition: .3s;
    color: var(--atext-color);
    text-decoration: none;
}
#write a:hover {
    border-radius:6px;
    border-bottom:2px solid transparent;
    background-color:var(--abottom-color);
    color: var(--ahover-color) !important;
    cursor:pointer;
}
#write a[href*="muggledy"] {
    border-bottom:2px solid red;
}
#write a[href*="muggledy"]:hover {
    background-color:red;
}
#write h2 a, #write h4 a, #write a[alt="null"], #write a[alt="ref"]{
    border-bottom: none !important;
    /*color: var(--code-color);*/
}
h2 a:hover:before, h4 a:hover:before, #write a[alt="null"]:hover:before{
    content: none !important;
}

/* 修复空链接（标题锚点）显示底部下划线的问题（padding宽度引起的问题），但是自定义锚点怎么处理？因为自定义的锚点链接里有一个空格，非空，所以自定义锚点时请额外加上alt="none"，这将会使得链接“消失” */
#write a:empty, #write a[alt="none"], #write a[alt="null"] {
    padding-left:0px; /*直接上display:none消除超链接会导致锚点失效，visibility:hidden又占位*/
    padding-right:0px;
}
#write a[alt="none"] span {
    display: none; /*消除空格或其他内容*/
}

/* 无样式超链接 */
#write a[alt="null"]:hover{
    background-color: inherit;
    border-radius: 0px;
    color: var(--atext-color) !important;
}

/* 样式：<超链接> */
#write a[alt="ref"]:before{
    content: "<";
}
#write a[alt="ref"]:after{
    content: ">";
}

/* 写法：<span alt="ref">[[1][],[2][]]</span> */
#write span[alt="ref"] a{
    border-bottom: none;
    color: var(--abottom-color);
    /*padding-left: 2px;
    padding-right: 2px;*/
}


/** 目录 **/


#write a.md-toc-inner {
    line-height: 1.6;
    white-space: pre-line;
    border-bottom: none;
    color: var(--toc-color);
}
.md-toc {
    margin-top: 50px;
    padding-bottom: 20px;
}
#write a.md-toc-inner:hover{
    text-decoration: underline;
    /* border-bottom: 2px solid var(--toc-color);text-decoration: none; */
    color: var(--toc-color) !important;
    background-color: inherit;
    border-radius: 0px;
}
#write a.md-toc-inner code{
    color: var(--toc-color);
    background-color: #f3f4f4;
}
#write a.md-toc-inner:hover:before {
    content: none !important;
}


h1,
h2,
h3,
h4,
h5,
h6 {
    position: relative;
    margin-top: 1rem;
    margin-bottom: 1rem;
    font-weight: bold;
    line-height: 1.4;
    cursor: text;
}

h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
    text-decoration: none;
}

h1 code {
    font-size: inherit !important;
}
h2 code {
    font-size: inherit !important;
}
h3 code {
    font-size: inherit !important;
}
h4 code {
    font-size: inherit !important;
}
h5 code {
    font-size: inherit !important;
}
h6 code {
    font-size: inherit !important;
}



/** 不同级别标题样式 **/


h1 {
    text-align: center;
    padding-bottom: 0.3em;
    font-size: 2.2em;
    line-height: 1.2;
    margin: 2.4em auto 1.2em;
    display:block;
}
h1 span{
    display: inline-block;
    position: relative;
}
h1 span:after {
    background: var(--titlebefore-color);
    bottom: -5px;
    content: '';
    height: 2px;
    left: 0;
    position: absolute;
    transform: scaleX(0);
    width: 100%;
    transition-delay: 0s;
    transition-duration: 0.2s;
    transition-timing-function: ease-in-out;
}
h1:hover span:after {
    transform: scaleX(1);
}

h2 {
    margin: 1.8em auto 1.2em;
    font-size: 1.8em;
    border-bottom: 2px solid var(--titlebefore-color);
}
h2::before {
    content: '\e689' !important; /* 风车图标 */
    color: var(--titlebefore-color);
    font-family: "iconfont";
}

/* h2标题前缀旋转动画 */
@-moz-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes avatar_turn_around{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}
h2:before {
    display: inline-block;
    -webkit-animation: avatar_turn_around 1s linear infinite;
    -moz-animation: avatar_turn_around 1s linear infinite;
    -o-animation: avatar_turn_around 1s linear infinite;
    -ms-animation: avatar_turn_around 1s linear infinite;
    animation: avatar_turn_around 1s linear infinite;
    font-size: 34px;
    margin-left: -29px;
}

/* h2标题内容稍稍偏右一点 */
h2 * {
    margin-left: .18rem;
}
#write>h2.md-focus:before {
    color: var(--focus-color);
}
#write>h2.md-focus {
    border-bottom-color: var(--focus-color);
}

.about-content-description h2:before{
    content: none !important;
}
.about-content-description h2 {
    border-bottom: none;
}

h3 {
    font-size: 1.4em;
    line-height: 1.43;
    margin: 1.6em auto 1.2em;
    padding-left: 9px;
    border-left: 5px solid var(--titlebefore-color);
}
h4 {
    margin-top: 1.3em;
    font-size: 1.2em;
    padding-left: 6px;
    padding-right: 6px;
    display: inline-block;
    border: 1px solid var(--titlebefore-color);
    border-top: 4px solid var(--titlebefore-color);
}

/* 三级四级标题点击后的前缀提示图标 */
#write>h3.md-focus:before,
#write>h4.md-focus:before {
    width: auto;
    height: auto;
    background-color: var(--focus-color);
    color: #ffffff;
}
#write>h3.md-focus,
#write>h4.md-focus {
    border-color: var(--focus-color);
}

#write h5::before,
#write h6::before {
    position: absolute;
    right: calc(100% + .75em);
    top: 0;
    color: var(--titlebefore-color); /* #5b5b5b */
    font-size: 0.8rem;
    font-weight: bold;
    font-variant: 'small-caps';
    white-space: nowrap;
    /* 文本强制不换行 */
    border: 0;
}
#write h5.md-focus:before, #write h6.md-focus:before{
    color: var(--focus-color);
}
#write h5, #write h6 {
    /* margin-left: 2em; */
    font-size: 1rem;
}
#write h5::before {
    content: 'H5';
    top: 0.18rem;
}
#write h6::before {
    content: 'H6';
    top: 0.18rem;
}



p,
blockquote,
ul,
ol,
dl,
table {
    margin: 0.8em 0;
}

li>ol,
li>ul {
    margin: 0 0;
}

body>h2:first-child {
    margin-top: 0;
    padding-top: 0;
}

body>h1:first-child {
    margin-top: 0;
    padding-top: 0;
}

body>h1:first-child+h2 {
    margin-top: 0;
    padding-top: 0;
}

body>h3:first-child,
body>h4:first-child,
body>h5:first-child,
body>h6:first-child {
    margin-top: 0;
    padding-top: 0;
}

a:first-child h1,
a:first-child h2,
a:first-child h3,
a:first-child h4,
a:first-child h5,
a:first-child h6 {
    margin-top: 0;
    padding-top: 0;
}

h1 p,
h2 p,
h3 p,
h4 p,
h5 p,
h6 p {
    margin-top: 0;
}

#write ol,
#write ul {
    padding-left: 35px;
    margin: .5rem 0;
}

#write ol>li>*,
#write ul>li>* {
    font-weight: normal;
}

#write ol>li>*:not(ol):not(ul),
#write ul>li>*:not(ol):not(ul) {
    padding-left: .25rem;
}



/** 引用块（提示型） **/


blockquote {
    /* border: 1px solid #d1f3ff; */
    border-left: 5px solid var(--blockquoteicon-color);
    padding: 10px 15px;
    color: #3f3f3f;
    background-color: var(--blockquotebg-color); /* white */
    border-radius: 3px;
    position:relative;
}

/* 给提示块加info图标 */
blockquote>* {
    margin-left: 2rem !important;
}
blockquote::before {
    content: '\e613';
    font-family: "iconfont";
    color: var(--blockquoteicon-color);
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    font-size: large;
    font-weight: 600;
}
/*
blockquote:hover {
    border-left: 5px solid var(--focus-color);
}
blockquote:hover:before {
    color: var(--focus-color);
}
*/


/** 表格样式 **/


table {
    padding: 0;
    word-break: initial;
    font-size:12pt;
}
/*
table tr {
    border-top: 1px solid var(--main-6);
    margin: 0;
    padding: 0;
}
*/
table tr:nth-child(2n) {
    background-color: var(--tableevenrow-color);
}
table tr th {
    font-weight: bold;
    border: 1px solid var(--tableborder-color);
    background-color: var(--tablethbg-color);
    border-bottom: 0;
    text-align: left;
    margin: 0;
    padding: 6px 13px;
}
table tr td {
    border: 1px solid var(--tableborder-color);
    text-align: left;
    margin: 0;
    padding: 6px 13px;
	
}
table tr th:first-child,
table tr td:first-child {
    margin-top: 0;
}
table tr th:last-child,
table tr td:last-child {
    margin-bottom: 0;
}
table tr:hover {
  background-color: var(--tablefocusrow-color);
}

/* 三线表（自定义需覆盖上述默认表格样式） */
div[alt="three-table"] table {
    border-top: 1.5pt solid;
    border-bottom: 1.5pt solid;
    font-size:11pt;
}
div[alt="three-table"] table tr td, div[alt="three-table"] table tr th {
    border: none;
}
div[alt="three-table"] table tr, div[alt="three-table"] table tr th, div[alt="three-table"] table tr:hover {
    background-color: var(--bg-color);
}
div[alt="three-table"] table tr th {
    border-bottom: 0.75pt solid;
    font-family:黑体;
    font-size:11pt;
}

/* 控制文本的居中or左or右显示 */
*[alt="center"]{
    text-align: center;
}
*[alt="left"]{
    text-align: left;
}
*[alt="right"]{
    text-align: right;
}

/* 无表头表格（且调小了格子的padding值） */
div[alt="notitle-table"] table {
    font-size: 11pt;
}
div[alt="notitle-table"] table tr, div[alt="notitle-table"] table tr th, div[alt="notitle-table"] table tr:hover {
    background-color: var(--bg-color);
}
div[alt="notitle-table"] table tr td:hover, div[alt="notitle-table"] table tr th:hover {
    background-color: var(--tablefocusrow-color);
}
div[alt="notitle-table"] table tr th {
    font-weight: normal;
}
div[alt="notitle-table"] table tr th, div[alt="notitle-table"] table tr td {
    padding: 0px 8px;
}


/** 代码块 **/


#write .CodeMirror pre {
    font-family: var(--code-font);
    font-size: 0.95em;
    padding-left: 12px;
}
.md-fences {
    background: var(--codeblockbg-color);
    border-radius: 3px;
    color: var(--codeblockfont-color);
    overflow-wrap: break-word;
    word-wrap: break-word;
    line-height: 1.6em;
    border: 1px solid #d0d5d7;
}

/* 行号左框线 */
/*
#write .CodeMirror-gutters {
    border-right: 1px solid rgba(204, 51, 0);
}
*/

/* 代码块行号颜色 */
.cm-s-inner .CodeMirror-linenumber {
    /* width: 2ch !important; */
    color: var(--codeblocknum-color);
}

/* 代码块光标线条宽度、颜色 */
#write .CodeMirror-cursors .CodeMirror-cursor {
    border-left: 2px solid var(--focus-color);
}

/* 选中行高亮 */
.md-fences:not(.md-focus) .CodeMirror-code>*:hover {
    background-color: var(--codeblockline-color);
}
.md-fences.md-focus .CodeMirror-code>div.CodeMirror-activeline {
    background-color: var(--codeblockline-color);
}

#write ol>li>*[class~="md-fences"], #write ul>li>*[class~="md-fences"] {
    padding-left: 0 !important;
}

/* 蓝色行内数学公式 */
/*
[md-inline='inline_math'] {
    color: blue;
    font-size: 100%;
}
*/

/* 修复行间公式在手机端屏幕宽度较小时公式极端缩小的问题，但是打印为pdf时仍要设为100%，否则有滚动条 */
@media only screen and (max-width: 800px) {
    .MathJax_SVG_Display svg{
        max-width: inherit !important;
    }
}

/* 头部YAML格式 */
pre.md-meta-block {
    font-family: "Poppins";
    color: var(--yaml-color) !important;
    padding: 15px;
    background: var(--yamlbg-color) !important;
    /*border: 1px grey dashed !important;*/
    font-size: 0.8rem;
    line-height: 1.45;
    border-radius: 5px;
}


/** 行内代码 **/


#write code {
    padding: 2px 4px;
    border-radius: 2px;
    font-family: var(--code-font); /*font-family: '微软雅黑';*/
    font-size: 0.9rem;
    color: var(--code-color);
    background-color: var(--codebg-color);
}


/** 脚注（上标） **/


#write .md-footnote {
    background-color: var(--footnotebg-color);
    color: var(--footnote-color);
}

/* 脚注上标链接禁止显示下划线样式 */
#write sup.md-footnote a{
    color: inherit !important; /* 鼠标hover时禁止颜色发生变化 */
    border-bottom: none;
    padding: 1px;
    background-color: inherit;
}


/** 文本高亮 **/


#write span[md-inline="highlight"] mark {
    background-color: var(--highlightbg-color);
    border-radius: 2px;
    padding: 2px 4px;
    margin: 0 2px;
    color: var(--highlight-color);
    font-weight: 500;
}


/** 分割线 **/


/*
hr {
    height: 1px;
    padding: 0;
    margin: 16px 0;
    background-color: var(--split-color);
    border: 0 none;
    overflow: hidden;
    box-sizing: content-box;
}
*/
/* 来自next主题样式 */
/*
hr {
    background-image: repeating-linear-gradient(-45deg, var(--split-color), var(--split-color) 4px, transparent 4px, transparent 8px);
    border: 0;
    height: 3px;
    margin: 40px 0
}
*/
/* 透明渐变水平线 */
hr {
 width:80%;
 margin:0 auto;
 border: 0;
 height: 2px;
 background-image: linear-gradient(to right, rgba(0, 0, 0, 0), var(--split-color), rgba(0, 0, 0, 0));
}


#write del {
    padding: 1px 2px;
}

.cm-s-inner .cm-link,
.cm-s-inner.cm-link {
    color: #22a2c9;
}

.cm-s-inner .cm-string {
    color: #22a2c9;
}



/** 任务列表小方框 **/


.md-task-list-item>input {
    margin-left: -1.3em;
    margin-top: 0.4rem;
    -webkit-appearance: none;
}
.md-task-list-item>input:before {
    content: '';
    display: inline-block;
    width: 0.875rem;
    height: 0.875rem;
    vertical-align: middle;
    text-align: center;
    font-size: 0.8rem;
    color: white;
    border-radius: 2px;
    /*background-color: white;*/
    border: 1px solid var(--taskborder-color);
    margin-top: -0.4rem;
    transition: all 0.2s linear;
}
.md-task-list-item>input:checked:before,
.md-task-list-item>input[checked]:before {
    content: '\2714';
    font-size: 0.625rem;
    color: white;
    border: 1px solid var(--taskfocus-color);
    background-color: var(--taskfocus-color);
    line-height: .8rem;
}
.md-task-list-item:before{
    content: none !important;
}

#write input[type=checkbox] {
    position: absolute;
    top: 6px;
    left: -6px;
    background-color: inherit;
}

.md-task-list-item.task-list-done {
    text-decoration: line-through;
    color: #999;
}
.md-task-list-item.task-list-done span {
    color: #999;
}


/** 导出html文件，修复流程图在手机端高度太大的问题 **/


.md-diagram-panel svg{
    /*max-width: inherit !important;*/
    height: inherit !important;
}



/* @media print {
    html {
        font-size: 13px;
    }
    table,
    pre {
        page-break-inside: avoid;
    }
    pre {
        word-wrap: break-word;
    }
} */

/* .md-fences {
    background-color: #f8f8f8;
} */

#write pre.md-meta-block {
    /* padding: 1rem; */
    font-size: 85%;
    line-height: 1.45;
    background-color: #f7f7f7;
    border: 0;
    border-radius: 3px;
    color: #777777;
    margin-top: 0 !important;
}

.mathjax-block>.code-tooltip {
    bottom: .375rem;
    /* bottom: .575rem; */
}

#write>h3.md-focus:before {
    left: -1.5625rem;
    top: .375rem;
}

#write>h4.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

#write>h5.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

#write>h6.md-focus:before {
    left: -1.5625rem;
    top: .285714286rem;
}

/* https://www.bnxb.com/divcss/27022.html */
details pre {
    color:#444;
    margin:15px auto;
    padding:20px 15px;
    padding-bottom: 0px;
    background:#fff url('') repeat;
    white-space:pre-wrap;
    word-wrap:break-word;
    letter-spacing:1.5px;
    font:14px/25px 'Comic Sans MS','courier new';
    line-height:22px;
    background-size:100% 44px;
}


/** 图片 **/


.md-image {
    margin: 15px auto 5px;
}
.md-image img {
    border-radius: 4px;
}

/* 当按`![shadow-随便写]()`格式写时（或`<img src="" alt="shadow-随便写">`），会有阴影 */
.md-image img[alt|='shadow'] {
    box-shadow: #84A1A8 0px 10px 15px;
    background-size: 100% 100%;
    cursor: default;
    border-left: 0;
    border-right: 0;
}

/* 模糊特效 */
.md-image img[alt|='blur'] {
    filter:blur(6px);
    -webkit-filter:blur(6px);
    -moz-filter:blur(6px);
    -ms-filter:blur(6px);
    -o-filter:blur(6px);
    transition: all 0.2s linear;
}
.md-image img[alt|='blur']:hover {
    filter:none;
    -webkit-filter:none;
    -moz-filter:none;
    -ms-filter:none;
    -o-filter:none;
}

/*图片暗灰*/
.md-image img[alt|='gray'] {
    filter:grayscale(100%);
}
.md-image img[alt|='gray']:hover {
    transition: 0.5s linear;
    filter:grayscale(0);
}

.md-image>.md-meta {
    border-radius: 3px;
    font-family: var(--body-font);
    padding: 2px 0 0 4px;
    font-size: 0.9em;
    color: inherit;
}

/* 图片自动编号 */
#write{
    counter-reset: imgNum;
}
#write p>.md-image:after{
    counter-increment: imgNum;
    content: "图" counter(imgNum) attr(alt) !important;
    text-align: center;
    width: 100%;
    display: inline-block;
    margin-top: 8px !important;
    font-size: small;
}

div[alt="fig"]{
    font-size: small;
    text-align: center;
    margin-top: -10px !important;
}

.md-tag {
    color: inherit;
}

.sidebar-tabs {
    border-bottom: none;
}

#typora-quick-open {
    border: 1px solid #ddd;
    background-color: #f8f8f8;
}

#typora-quick-open-item {
    background-color: #FAFAFA;
    border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
    border-style: solid;
    border-width: 1px;
}

#md-notification {
    background-color: var(--bg-color) !important;
}

/* focus mode */

.on-focus-mode blockquote {
    border-left-color: rgba(85, 85, 85, 0.12);
}

header,
.context-menu,
.megamenu-content,
footer {
    font-family: var(--body-font);
}


/* 侧边栏 */


#typora-sidebar{
    background-color: var(--sidebarbg-color);
}

.file-list-item:hover, .file-list-item.active {
    background-color: var(--sidelist-selected-color);
}

.file-node-content, .file-tree-node.active .file-node-content {
    color: var(--para-color);
}
.file-tree-node.active>.file-node-background {
    background-color: var(--sidelist-selected-color);
}
.file-node-content:hover .file-node-icon {
    color: var(--titlebefore-color);
}
.file-node-content:hover {
    cursor: pointer;
    color: var(--titlebefore-color) !important;
}
.outline-item:hover {
    color: var(--titlebefore-color) !important;
    background-color: var(--sidelist-selected-color);
}


.md-lang {
    color: #b4654d;
}

.html-for-mac .context-menu {
    --item-hover-bg-color: #e6f0fe;
}

.info-panel-tab:hover{
    color: var(--para-color);
}

@media print {
    .typora-export * {
        -webkit-print-color-adjust: exact;
    }
    html {
        font-size: 16px!important;
    }
    body {
        font-family: Times, 'SimSun', serif!important;
        color: #000000!important;
    }
    p {
        color: #000000!important;
    }
    table,
    pre {
        page-break-inside: avoid;
    }
    pre {
        word-wrap: break-word;
    }
    .MathJax_SVG_Display svg{
        max-width: 100% !important;
    }
}



/** 有序、无序列表，来自Butterfly主题 **/


#write ul li, #write ol li, #write .ul .li, #write .ol .li {
    list-style-type: none;
}
#write ul>li:not(.tab):before, #write .ul>.li:not(.tab):before {
    margin-left: -22px;
    margin-top: 10px;
    width: .62em;
    height: .62em;
    border: .1em solid var(--ulol-color); /* #81d8cf */
    border-radius: .31em;
    background: 0 0;
    content: '';
    line-height: .42em;
}
#write ol li:before, #write ul li:before, #write .ol .li:before, #write .ul .li:before {
    position: absolute;
    background: var(--ulol-color); /* #81d8cf */
    color: var(--olfore-color);
    cursor: pointer;
    -webkit-transition: all .3s ease-out;
    -moz-transition: all .3s ease-out;
    -o-transition: all .3s ease-out;
    -ms-transition: all .3s ease-out;
    transition: all .3s ease-out;
}
#write ol li:first-child, #write .ol .li:first-child { /* https://www.w3school.com.cn/cssref/pr_gen_counter-increment.asp */
    counter-reset: li;
}
#write ol li:hover:before, #write ul li:hover:before, #write .ol .li:hover:before, #write .ul .li:hover:before {
    -webkit-transform:rotate(360deg);
    -moz-transform:rotate(360deg);
    -o-transform:rotate(360deg);
    -ms-transform:rotate(360deg);
    transform:rotate(360deg);
}
#write ul>li:not(.tab):hover:before, #write .ul>.li:not(.tab):hover:before{
    border-color: var(--focus-color);
}
#write ol>li:before, #write .ol>.li:before {
    margin-top: 6px;
    margin-left: -25px;
    width: 1.65em;
    height: 1.65em;
    border-radius: 0.825em;
    content: counter(li);
    counter-increment: li;
    text-align: center;
    font-size: .65em;
    line-height: 1.7em;
}

/* 列表子项上下间隔调整 */
#write ul li *, #write ol li *, #write .ul .li *, #write .ol .li * {
    margin-top: 0px;
    margin-bottom: 0px;
}

/* 列表上下间隔调整 */
#write ul li, #write ol li, #write .ul .li, #write .ol .li {
    margin-top: 7px;
    margin-bottom: 7px;
}


/** 小标签 **/


font {
    display: inline;
    padding: .2em .6em;
    font-size: 90%;
    font-weight: 400;
    line-height: 1;
    color: #fff;
    text-align: center;
    white-space: nowrap;
    vertical-align: baseline;
    border-radius: .1rem;
    border-radius: 6px;
    background-color: var(--spannote-color);
}
font[title="red"] {
    background-color:#e91e64;
}
font[title="blue"] {
    background-color:#02aaf4;
}
font[title="yellow"] {
    background-color:#ffc50a;
}
font[title="green"] {
    background-color:#8bc34a;
}
font[title="gray"] {
    background-color:#4c4c4c;
}


/** 强调型文本 **/


span[alt='emp'] {
    border-bottom: 4px dotted var(--emptext-color);
}
span[alt='underline'] {
    border-bottom: 2px solid var(--emptext-color);
}
span[alt='wavy'] {
    text-decoration-style: wavy;
    text-decoration-line: underline;
    text-decoration-color: var(--emptext-color);
}


/** 折叠标签 **/


details {
    display: block;
    padding: 16px;
    margin: 1em 0;
    border-radius: 4px;
    background: var(--bg-color);
    font-size: 14px;
    -webkit-transition: all .28s ease;
    -moz-transition: all .28s ease;
    -o-transition: all .28s ease;
    -ms-transition: all .28s ease;
    transition: all .28s ease;
    -moz-transition: all .28s ease;
    -webkit-transition: all .28s ease;
    -o-transition: all .28s ease;
    border: 1px solid var(--bg-color);
}
summary {
    display: list-item;
}
details summary {
    cursor: pointer;
    padding: 16px;
    margin: -16px;
    border-radius: 4px;
    color: var(--detailstxt-color);
    font-size: .875rem!important;
    font-weight: 700;
    position: relative;
    line-height: normal;
}
details>summary {
    background: var(--detailsbg-color);
}
details[open] {
    border-color: var(--detailsborder-color);
}
details[open]>summary {
    color: #444;
    margin-bottom: 0;
}
details[open]>summary {
    border-bottom: 1px solid var(--detailsborder-color);
    border-bottom-left-radius: 0;
    border-bottom-right-radius: 0;
}

/* 折叠框、视频、音频标签点击时候会出现黑色边框，极不美观，去除 */
summary:focus {
    outline: none !important;
}
video:focus{
    outline: none !important;
}
audio:focus{
    outline: none !important;
}


/** 隐藏型文本 **/


span[alt="hide"] {
    color: transparent;
    background: var(--hidetextcover-color);
    border-radius: 2px;
    -webkit-transition: all .28s ease;
    -moz-transition: all .28s ease;
    -o-transition: all .28s ease;
    -ms-transition: all .28s ease;
    transition: all .28s ease;
    -moz-transition: all .28s ease;
    -webkit-transition: all .28s ease;
    -o-transition: all .28s ease;
}
span[alt="hide"]:hover {
    color:var(--hidetext-color);
    background:0 0
}


/** 彩虹变换字体特效（来自黑石博客） **/


@-webkit-keyframes rainbowan {
    to {
        background-position: -2000vw;
    }
}
@keyframes rainbowan {
    to {
        background-position: -2000vw;
    }
}
span[alt="rainbow"], span[alt="rainbow"] * {
    padding-top: 3px;
    background-image: linear-gradient( to left, orangered, orange, gold, lightgreen, cyan, dodgerblue, mediumpurple, hotpink, orangered);
    background-size: 110vw;
    -webkit-background-clip: text;
    background-clip: text;
    color: transparent;
    -webkit-animation: rainbowan 60s linear infinite;
    animation: rainbowan 60s linear infinite;
}


/** 一款时尚的span字体，来自QinXS **/


span[alt="modern"] {
    display: inline;
    padding: 5px 10px;
    border-radius: 20px;
    font-family: var(--body-font);
    font-size: 1em;
    letter-spacing: .2em;
    color: red;
    text-shadow: 0 8px 9px #c4b59d, 0 -2px 1px #fff;
    font-weight: 700;
    background: linear-gradient(to bottom,#ece4d9 0,#e9dfd1 100%);
}


/** volantis文本按钮样式 **/


span[alt="btn"] {
    color: var(--spanbtn-color);
    border: 1px solid var(--spanbtn-color);
    padding: 3px 4px 2px;
    margin: 4px;
    line-height: 1.1;
    border-radius: 2px;
}
#write span[alt="btn"] a{
    color: var(--spanbtn-color);
    border-bottom:none;
    background-color:inherit;
    transition: none;
}
span[alt="btn"]:hover {
    color: var(--focus-color);
    border: 1px solid var(--focus-color);
}
#write span[alt="btn"]:hover a{
    color: var(--focus-color) !important;
}


/** 抖音字效 **/


@-webkit-keyframes uk-text-shadow-glitch{0%{text-shadow:none}25%{text-shadow:-1px -1px 0 #ff0048,1px 1px 0 #3234ff}50%{text-shadow:1px -1px 0 #ff0048,-1px 1px 0 #3234ff}75%{text-shadow:-1px 1px 0 #ff0048,1px -1px 0 #3234ff}to{text-shadow:1px 1px 0 #ff0048,-1px -1px 0 #3234ff}}@keyframes uk-text-shadow-glitch{0%{text-shadow:none}25%{text-shadow:-1px -1px 0 #ff0048,1px 1px 0 #3234ff}50%{text-shadow:1px -1px 0 #ff0048,-1px 1px 0 #3234ff}75%{text-shadow:-1px 1px 0 #ff0048,1px -1px 0 #3234ff}to{text-shadow:1px 1px 0 #ff0048,-1px -1px 0 #3234ff}}

span[alt="shake"] {
    -webkit-animation: uk-text-shadow-glitch .95s cubic-bezier(1,-1.91,0,2.79) 0s infinite normal both running;
    animation: uk-text-shadow-glitch .95s cubic-bezier(1,-1.91,0,2.79) 0s infinite normal both running;
}


/* https://www.jq22.com/webqd4214（爱是一道光，绿到你发慌） */
span[alt="glow"] {
	font-family:'Audiowide';
	text-align:center;
	/*color:black;*/
	-webkit-transition:all 1.5s ease;
	transition:all 1.5s ease;
}
span[alt="glow"]:hover {
    color:#00a67c;
	-webkit-animation:Glow 1.5s ease infinite alternate;
	animation:Glow 1.5s ease infinite alternate;
}
@-webkit-keyframes Glow {
	from {
	text-shadow:0 0 10px #fff,0 0 20px #fff,0 0 30px #fff,0 0 40px #00a67c,0 0 70px #00a67c,0 0 80px #00a67c,0 0 100px #00a67c,0 0 150px #00a67c;
}
to {
	text-shadow:0 0 5px #fff,0 0 10px #fff,0 0 15px #fff,0 0 20px #00a67c,0 0 35px #00a67c,0 0 40px #00a67c,0 0 50px #00a67c,0 0 75px #00a67c;
}
}@keyframes Glow {
	from {
	text-shadow:0 0 10px #fff,0 0 20px #fff,0 0 30px #fff,0 0 40px #00a67c,0 0 70px #00a67c,0 0 80px #00a67c,0 0 100px #00a67c,0 0 150px #00a67c;
}
to {
	text-shadow:0 0 5px #fff,0 0 10px #fff,0 0 15px #fff,0 0 20px #00a67c,0 0 35px #00a67c,0 0 40px #00a67c,0 0 50px #00a67c,0 0 75px #00a67c;
}
}


/* 空心字等文字特效 https://www.cnblogs.com/xiaohuochai/p/7521282.html */


span[alt="hollow"]{
    color:white;
    text-shadow:1px 1px black,-1px -1px black,1px -1px black,-1px 1px black;
}

@keyframes blink-smooth{50%{color:transparent;}}
span[alt="blink"]{
  animation:.5s blink-smooth infinite alternate linear;
}

span[alt="str"]{
    padding: 2px 4px;
    color: var(--commonstr-color);
    background-color: var(--commonstrbg-color);
    border-radius: 3px;
    font-size: 15px;
    font-family: var(--body-font);
}


/* 时间轴（来自Volantis主题） */


div[alt="timeline"] {
    margin-top: 8px;
    margin-left: 8px;
}
div[alt="timenode"] {
    position: relative;
}
div[alt="timenode"]:after, div[alt="timenode"]:before {
    content: "";
    z-index: 1;
    position: absolute;
    background: rgba(68,215,182,.5);
    width: 2px;
    left: 7px;
}
div[alt="timenode"]:before {
    top: 0px;
    height: 6px;
}
div[alt="timenode"] div[alt="body"], div[alt="timenode"] div[alt="meta"] {
    max-width: calc(100% - 24px);
}
div[alt="timenode"] div[alt="meta"] {
    position: relative;
    color: var(--para-color);
    line-height: 32px;
    font-size: .8rem;
    font-weight: 700;
    margin: 0 0 0 24px;
}
div[alt="timenode"] div[alt="meta"]:after, div[alt="timenode"] div[alt="meta"]:before {
    content: "";
    position: absolute;
    top: 8px;
    z-index: 2;
    left: -24px;
}
div[alt="timenode"] div[alt="meta"]:before {
    background: rgba(68,215,182,.5);
    width: 16px;
    height: 16px;
    border-radius: 8px;
}
div[alt="timenode"] div[alt="meta"]:after {
    background: #44d7b6;
    margin-left: 2px;
    margin-top: 2px;
    width: 12px;
    height: 12px;
    border-radius: 6px;
    -webkit-transform: scale(.5);
    -moz-transform: scale(.5);
    -o-transform: scale(.5);
    -ms-transform: scale(.5);
    transform: scale(.5);
}
div[alt="timenode"] div[alt="body"] {
    margin: 4px 0 10px 24px;
    padding: 10px;
    border-radius: 12px;
    background: var(--timebodybg-color);
    display: inline-block;
    font-size: .9rem;
}
div[alt="timenode"]:not(:last-child):after {
    top: 26px;
    height: calc(100% - 26px);
}
div[alt="timenode"]:last-child:after {
    top: 26px;
    height: calc(100% - 30px);
}
div[alt="timenode"]:hover div[alt="meta"]{
    color: var(--para-color);
}
div[alt="timenode"]:hover div[alt="meta"]:before{
    background:rgba(255,87,34,.5)
}
div[alt="timenode"]:hover div[alt="meta"]:after{
    background:#ff5722;-webkit-transform:scale(1);
    -moz-transform:scale(1);
    -o-transform:scale(1);
    -ms-transform:scale(1);
    transform:scale(1);
}


/* 参考链接样式修改（隐藏链接部分，只显示标题） */


.footnotes.md-def-link .md-def-split, .footnotes .md-def-url {
    display: none;
}
.footnotes.md-def-link .md-def-name, .footnotes .md-def-title {
    display: inline;
}
.footnotes {
    margin-top: 2px;
    margin-bottom: 2px;
}


/* KBD按键样式 */


kbd {
    font: var(--code-font);
    font-size: .8em;
    background: var(--bg-color);
    color: var(--body-color);
    border-radius: 5px;
}@import url();

:root {
    /* dy color */
    --select-text-bg-color: #ffafa3; /* 文本选中背景色（粉红） */
    /*--primary-color: red;*/
    --bg-color: white; /* 整体背景色（白色） */
    --sidebarbg-color: white; /* 侧边栏背景色（白色） */
    --focus-color: #ff5d52; /* 点击某些元素（如标题）显示的颜色（偏红） */
    --codeblockbg-color: #eee; /* 代码块背景色（灰色） */
    --codeblockfont-color: #555; /* 代码块默认字体颜色（黑色） */
    --codeblockline-color: #e0f8f8; /* 代码块选中行颜色（青色） */
    --titlebefore-color: #00c4b6; /* 各级标题点缀颜色（绿色） */
    --codeblocknum-color: rgba(128, 128, 255, 0.8); /* 代码块行编号颜色（蓝色） */
    --blockquoteicon-color: #5fa7e4; /* blockquote提示图标色（蓝色） */
    --blockquotebg-color: #f4fcff; /* blockquote背景色（淡蓝） */
    --ulol-color: #81accf; /* 有序无序列表前缀颜色（灰色） */
    --olfore-color: #fff; /* 有序列表字体颜色（白色） */
    --tableevenrow-color: #eee; /* 表格偶数行颜色（淡灰） */
    --tablefocusrow-color: #e0f8f8; /* 表格鼠标悬停行颜色（淡蓝） */
    --tableborder-color: #c5c5c5; /* 表格边框色（黑色） */
    --tablethbg-color: #f4fcff; /* 表格表头背景色（淡蓝） */
    --scrollbar-color: #9e9e9e; /* 滚动条颜色（灰色） */
    --toc-color: #00a0a0; /* 目录颜色（绿色） */
    --atext-color: black; /* 超链接文本颜色（黑色） */
    --ahover-color: #ffffffe6; /* 超链接悬停文本颜色（白色） */
    --abottom-color: #81d8cf; /* 超链接下划线颜色（青色） */
    --code-color: #ff3502; /* 行内代码前景色（红色） */
    --codebg-color: #f8f5ec; /* 行内代码背景色（淡红） */
    --footnote-color: #e96900; /* 脚注上标前景色（红色） */
    --footnotebg-color: #f8f8f8; /* 脚注上标背景色（淡灰） */
    --highlight-color: red; /* 高亮文本前景色（红色） */
    --highlightbg-color: yellow; /* 高亮文本背景色（黄色） */
    --split-color: #00c4b6; /* 分割线颜色（绿色） */
    --taskborder-color: red; /* 任务列表边框色（红色） */
    --taskfocus-color: #00c4b6; /* 任务列表选中填充色（绿色） */
    --spannote-color: #e91e64; /* 小标签背景色（红色） */
    --emptext-color: #fe5f58; /* 几款强调型文本的颜色（红色） */
    --hidetextcover-color: #a1a1a1; /* 隐藏文本遮罩颜色（灰色） */
    --hidetext-color: #444; /* 隐藏文本颜色（黑色） */
    --spanbtn-color: #44d7b6; /* 文本按钮颜色（绿色） */
    --detailstxt-color: rgba(68,68,68,.7); /* 折叠框summary文字颜色（灰色） */
    --detailsbg-color: #ebf9ed; /* 折叠框summary背景色（青绿色） */
    --detailsborder-color: #00c4b6; /* 折叠框边框色（绿色） */
    --body-color: #000000; /* 文本颜色（黑色） */
    --para-color: #000000; /* 段落文本颜色（黑色） */
    --commonstr-color: #232629; /* 常规字符串颜色（黑色） */
    --commonstrbg-color: #e3e6e8; /* 常规字符串背景色（灰色） */
    --timebodybg-color: #efeded; /* 时间轴主体部分背景色（灰色） */
    --sidelist-selected-color: #eeeeee; /* 侧边栏条目选中背景色（灰色） */
    --yamlbg-color: #f7f7f7; /* 头部YAML背景色（白色） */
    --yaml-color: #585858; /* 头部YAML字体颜色（黑色） */
    /* dy font */
    --body-font: 'Source Sans Pro', '等距更纱黑体 SC', 'Helvetica Neue', Arial, sans-serif; /* 全局字体（"Poppins", -apple-system, "Helvetica Neue", Helvetica, "Noto Sans", "Nimbus Sans L", Arial, "Liberation Sans", "Noto Sans CJK SC", "PingFang SC", "Hiragino Sans GB", "Source Han Sans SC", "Source Han Sans CN", "Microsoft YaHei", "Wenquanyi Micro Hei", "WenQuanYi Zen Hei", "ST Heiti", SimHei, "WenQuanYi Zen Hei Sharp", sans-serif;） */
    --code-font: 'JetBrains Mono'; /* 代码块以及行内代码字体 */
    --writep-font: '微软雅黑'; /* 自定义微软雅黑 */
    /* bg image */
    --bgimg-url: url(file:///C://Users//Administrator//AppData//Roaming//Typora/themes/bg-light.gif);
}
/*标题1居中
#write h1 {
  text-align: center;
  column-span: all;
}*/
/*正文*/
#write {
  font-family: "微软雅黑";
}

/*目录隐藏标题1
.md-toc-h1 {
  display: none;
}*/

 body {font-variant-ligatures: no-common-ligatures;} 
        #write { counter-reset: write-h2 Figures Tables Fences; }
        #write > h1 { counter-reset: write-h2; }
        #write > h2 { counter-reset: write-h3; }
        #write > h3 { counter-reset: write-h4; }
        #write > h4 { counter-reset: write-h5; }
        #write > h5 { counter-reset: write-h6; }
        
        @media print {
            pb { display: block; page-break-after: always; }
            h1 { page-break-before: always; }
            h1:first-of-type { page-break-before: avoid; }
            p:has(img:first-child) { page-break-inside: avoid; }
        }

        #write > h2:before {
            counter-increment: write-h2;
            content: counter(write-h2) ". ";
        }
        
        #write > h3:before,
        #write > h3.md-focus.md-heading:before {
            counter-increment: write-h3;
            content: counter(write-h2) "." counter(write-h3) " ";
        }
        
        #write > h4:before,
        #write > h4.md-focus.md-heading:before {
            counter-increment: write-h4;
            content: counter(write-h2) "." counter(write-h3) "." counter(write-h4) " ";
        }
        
        #write > h5:before,
        #write > h5.md-focus.md-heading:before {
            counter-increment: write-h5;
            content: counter(write-h2) "." counter(write-h3) "." counter(write-h4) "." counter(write-h5) " "
        }
        
        #write > h6:before,
        #write > h6.md-focus.md-heading:before {
            counter-increment: write-h6;
            content: counter(write-h2) "." counter(write-h3) "." counter(write-h4) "." counter(write-h5) "." counter(write-h6) " "
        }
        
        #write > h3.md-focus:before,
        #write > h4.md-focus:before,
        #write > h5.md-focus:before,
        #write > h6.md-focus:before,
        h3.md-focus:before,
        h4.md-focus:before,
        h5.md-focus:before,
        h6.md-focus:before {
            color: inherit;
            border: inherit;
            border-radius: inherit;
            position: inherit;
            left: initial;
            float: none;
            top: initial;
            font-size: inherit;
            padding-left: inherit;
            padding-right: inherit;
            vertical-align: inherit;
            font-weight: inherit;
            line-height: inherit;
        }

        .outline-content { counter-reset: outline-h2; }
        .outline-h1 { counter-reset: outline-h2; }
        .outline-h2 { counter-reset: outline-h3; }
        .outline-h3 { counter-reset: outline-h4; }
        .outline-h4 { counter-reset: outline-h5; }
        .outline-h5 { counter-reset: outline-h6; }
        
        .outline-content .outline-h2 .outline-label:before {
            counter-increment: outline-h2;
            content: counter(outline-h2) ". ";
        }
        
        .outline-content .outline-h3 .outline-label:before {
            counter-increment: outline-h3;
            content: counter(outline-h2) "." counter(outline-h3) " ";
        }
        
        .outline-content .outline-h4 .outline-label:before {
            counter-increment: outline-h4;
            content: counter(outline-h2) "." counter(outline-h3) "." counter(outline-h4) " ";
        }
        
        .outline-content .outline-h5 .outline-label:before {
            counter-increment: outline-h5;
            content: counter(outline-h2) "." counter(outline-h3) "." counter(outline-h4) "." counter(outline-h5) " ";
        }
        
        .outline-content .outline-h6 .outline-label:before {
            counter-increment: outline-h6;
            content: counter(outline-h2) "." counter(outline-h3) "." counter(outline-h4) "." counter(outline-h5) "." counter(outline-h6) " ";
        }

        .md-toc-content { counter-reset: toc-h2; }
        .md-toc-h1 { counter-reset: toc-h2; }
        .md-toc-h2 { counter-reset: toc-h3; }
        .md-toc-h3 { counter-reset: toc-h4; }
        .md-toc-h4 { counter-reset: toc-h5; }
        .md-toc-h5 { counter-reset: toc-h6; }
        
        .md-toc-content .md-toc-h2 a:before {
            counter-increment: toc-h2;
            content: counter(toc-h2) ". ";
        }
        
        .md-toc-content .md-toc-h3 a:before {
            counter-increment: toc-h3;
            content: counter(toc-h2) "." counter(toc-h3) " ";
        }
        
        .md-toc-content .md-toc-h4 a:before {
            counter-increment: toc-h4;
            content: counter(toc-h2) "." counter(toc-h3) "." counter(toc-h4) " ";
        }
        
        .md-toc-content .md-toc-h5 a:before {
            counter-increment: toc-h5;
            content: counter(toc-h2) "." counter(toc-h3) "." counter(toc-h4) "." counter(toc-h5) " ";
        }
        
        .md-toc-content .md-toc-h6 a:before {
            counter-increment: toc-h6;
            content: counter(toc-h2) "." counter(toc-h3) "." counter(toc-h4) "." counter(toc-h5) "." counter(toc-h6) " ";
        }
#write .md-image::after {
            counter-increment: Figures;
            content: "Figure " counter(Figures) " " attr(data-alt);
            font-family: monospace;
            display: block;
            text-align: center;
            margin: 4px 0;
        }

        #write .table-figure::after {
            counter-increment: Tables;
            content: "Table " counter(Tables);
            font-family: monospace;
            display: block;
            text-align: center;
            margin: 4px 0;
        }

        #write .md-fences {
            margin-bottom: 2.4em;
        }
        #write .md-fences::after {
            counter-increment: Fences;
            content: "Fence " counter(Fences);
            position: absolute;
            width: 100%;
            text-align: center;
            font-family: monospace;
            margin: 0.6em 0;
            font-size: 1.1em;
            z-index: 9;
        }
        #write .md-fences.md-fences-advanced.md-focus::after {
            content: ""
        }
        
</style>
</head>
<body class='typora-export os-windows'>
<div id='write'  class=''><h1><a name="cdn" class="md-header-anchor"></a><span>cdn</span></h1><h2><a name="cdn-列表" class="md-header-anchor"></a><span>cdn 列表</span></h2><h3><a name="react" class="md-header-anchor"></a><span>react</span></h3><ul><li><span>v17.0.2 : </span><a href='https://cdn.jsdelivr.net/gh/specialCoder/CDN/public/react/17.0.2/react.production.min.js' target='_blank' class='url'>https://cdn.jsdelivr.net/gh/specialCoder/CDN/public/react/17.0.2/react.production.min.js</a></li></ul><h3><a name="react-dom" class="md-header-anchor"></a><span>react-dom</span></h3><ul><li><span>v17.0.2 : </span><a href='https://cdn.jsdelivr.net/gh/specialCoder/CDN/public/react-dom/17.0.2/react-dom.production.min.js' target='_blank' class='url'>https://cdn.jsdelivr.net/gh/specialCoder/CDN/public/react-dom/17.0.2/react-dom.production.min.js</a></li></ul><p>&nbsp;</p><hr /><h2><a name="quick-start" class="md-header-anchor"></a><span>quick start</span></h2><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">PS D:\mytest\cdn&gt; tree /f seldom</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">文件夹 PATH 列表</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">卷序列号为 <span class="cm-number">00000044</span> CF0D:74A5</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">D:\MYTEST\CDN\SELDOM</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  seldom-main.css</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  seldom-utilities.css</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  XTestRunner_logo.jpg</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">没有子文件夹</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 216px;"></div><div class="CodeMirror-gutters" style="display: none; height: 216px;"></div></div></div></pre><ul><li><span>cdn列表：</span><a href='https://cdn.jsdelivr.net/gh/qingdog/cdn/' target='_blank' class='url'>https://cdn.jsdelivr.net/gh/qingdog/cdn/</a></li></ul><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="shell"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/qingdog/cdn/seldom/seldom-main.css</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/qingdog/cdn/seldom/seldom-utilities.css</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/qingdog/cdn@1.7.5/seldom/seldom-utilities.css</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://qingdog.netlify.app/seldom/seldom-utilities.css</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://seldom.pages.dev/seldom-utilities.css</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://qingdog-cdn.pages.dev/seldom/seldom-utilities.css</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment"># 图片</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://raw.githubusercontent.com/qingdog/cdn/v1.7.5/seldom/XTestRunner_logo.jpg</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/qingdog/cdn/seldom/XTestRunner_logo.jpg</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 240px;"></div><div class="CodeMirror-gutters" style="display: none; height: 240px;"></div></div></div></pre><ul><li><span>通过jsDelivr引用资源</span></li></ul><p><span>使用方法：</span><a href='https://link.zhihu.com/?target=https%3A//cdn.jsdelivr.net/gh/'><span>https://cdn.jsdelivr.net/gh/</span></a><span>你的</span><a href='https://zhida.zhihu.com/search?q=用户名&amp;zhida_source=entity&amp;is_preview=1'><span>用户名</span></a><span>/你的仓库名@发布的版本号/</span><a href='https://zhida.zhihu.com/search?q=文件路径&amp;zhida_source=entity&amp;is_preview=1'><span>文件路径</span></a></p><p><span>例如：</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="text"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="text"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@1.0/images/trhx.png</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@2.0.1/css/style.css &nbsp;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.3//The%20Pet%20Girl%20of%20Sakurasou.mp4</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 72px;"></div><div class="CodeMirror-gutters" style="display: none; height: 72px;"></div></div></div></pre><p><span>注意：版本号不是必需的，是为了区分新旧资源，如果不使用版本号，将会直接引用最新资源，除此之外还可以使用某个范围内的版本，查看所有资源等，具体使用方法如下：</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="text" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang="text"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 加载任何Github发布、提交或分支</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/user/repo@version/file</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 加载 jQuery v3.2.1</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/dist/jquery.min.js</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 使用版本范围而不是特定版本</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery@3.2/dist/jquery.min.js &nbsp; https://cdn.jsdelivr.net/gh/jquery/jquery@3/dist/jquery.min.js</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 完全省略该版本以获取最新版本</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 将“.min”添加到任何JS/CSS文件中以获取缩小版本，如果不存在，将为会自动生成</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/src/core.min.js</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 在末尾添加 / 以获取资源目录列表</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery/</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 432px;"></div><div class="CodeMirror-gutters" style="display: none; height: 432px;"></div></div></div></pre><hr /><ol start='' ><li><strong><span>使用 RawGit</span></strong><span>： RawGit 是一个提供从 GitHub 仓库直接提供原始文件的服务。与 jsDelivr 类似，你可以通过 RawGit 的链接直接访问 GitHub 上的文件。不过，需要注意的是，从 2018 年起，RawGit 停止接受新文件，但仍然可以访问旧文件。</span></li><li><strong><span>使用 GitHack</span></strong><span>： GitHack 是另一个提供类似 RawGit 功能的服务，允许你通过 CDN 方式访问 GitHub 上的文件。</span></li><li><strong><span>使用 Cloudflare Workers/Pages</span></strong><span>： </span><code>Cloudflare Workers 允许你运行自定义的 JavaScript 代码来处理 HTTP 请求。你可以编写一个 Worker 来从 GitHub 仓库中获取文件并作为 CDN 提供服务。这个选项稍微复杂一些，但提供了更多的自定义能力。</code></li><li><strong><span>使用 Netlify</span></strong><span>： </span><code>Netlify 是一个静态网站托管服务，它可以从 GitHub 仓库自动部署网站。你可以利用 Netlify 的 CDN 功能来托管静态资源。Netlify 提供了免费计划，并支持自定义域名和 SSL。</code></li><li><strong><span>使用 Vercel</span></strong><span>： Vercel（之前称为 Zeit Now）也是一个静态网站和服务器less Functions 的托管平台，它可以从 GitHub 仓库自动部署项目，并提供全球 CDN 加速。</span></li><li><strong><span>使用 Surge</span></strong><span>： Surge 是一个命令行工具，可以快速部署静态网站和资源到全球 CDN。虽然它不如 Netlify 和 Vercel 那样功能丰富，但操作简单，适合快速部署。</span></li><li><strong><span>使用 AWS CloudFront + S3</span></strong><span>： 虽然这不是完全免费的服务，但亚马逊的 AWS 提供了免费层级的 S3 存储和一定量的 CloudFront CDN 数据传输。你可以将文件上传到 S3，然后通过 CloudFront 分发。</span></li><li><strong><span>使用 Firebase Hosting</span></strong><span>： Firebase Hosting 提供了一个免费的 CDN 服务，可以托管静态网站和资源。它也支持从 GitHub 仓库自动部署。</span></li><li><span>jsdelivr：</span><code>jsDelivr 可以加载 github 仓库里 release 包里面的文件内容</code></li></ol><h2><a name="为什么要用cdn" class="md-header-anchor"></a><span>为什么要用CDN？</span></h2><blockquote><p><span>CDN的全称是Content Delivery Network，即内容分发网络。CDN是构建在网络之上的内容分发网络，依靠部署在各地的边缘服务器，通过中心平台的负载均衡、内容分发、调度等功能模块，使用户就近获取所需内容，降低网络拥塞，提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。</span><br/><span>-</span><span>- 百度百科</span></p></blockquote><p><span>通俗的来讲CDN主要有两个功能：</span></p><ul><li><span>基础功能：可以提供静态文件内容</span></li><li><span>主要功能：加速内容获取，提高访问速度</span></li></ul><h2><a name="jsdelivr-是什么" class="md-header-anchor"></a><span>jsDelivr 是什么</span></h2><blockquote><p><span>A free, fast, and reliable Open Source CDN for npm, GitHub, Javascript, and ESM.</span><br/><span>-</span><span>- from </span><a href='https://www.jsdelivr.com/' target='_blank' class='url'>https://www.jsdelivr.com/</a></p></blockquote><p><span>简单来说就是它可以为开放资源（比如 npm/github release等）提供CDN服务。</span></p><p><span>网络分布：</span><a href='https://www.jsdelivr.com/network#map' target='_blank' class='url'>https://www.jsdelivr.com/network#map</a></p><p><img src="https://segmentfault.com/img/bVcXK9F" referrerpolicy="no-referrer"></p><p><span>可以看到在中国也有好几台服务器，国内使用也可以完全不用担心速度。</span></p><h2><a name="jsdelivr--github-可以做什么" class="md-header-anchor"></a><span>jsDelivr + Github 可以做什么？</span></h2><p><strong><span>通过jsDelivr 可以加载 github 仓库里的文件内容。</span></strong><span> </span></p><h3><a name="通过jsdelivr引用资源" class="md-header-anchor"></a><span>通过jsDelivr引用资源</span></h3><p><img src="https://segmentfault.com/img/bVcXK1X" referrerpolicy="no-referrer"></p><h4><a name="常用使用-release-包里面的内容" class="md-header-anchor"></a><span>常用：使用 release 包里面的内容</span></h4><h5><a name="指定版本" class="md-header-anchor"></a><span>指定版本：</span></h5><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/你的用户名/你的仓库名@发布的版本号/文件路径</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 24px;"></div><div class="CodeMirror-gutters" style="display: none; height: 24px;"></div></div></div></pre><p><span>例如：</span><a href='https://cdn.jsdelivr.net/gh/specialCoder/cdn@0.1.3/public/jquery/jquery.min.js' target='_blank' class='url'>https://cdn.jsdelivr.net/gh/specialCoder/cdn@0.1.3/public/jquery/jquery.min.js</a></p><p><span>就是加载 v0.1.3版本下的这个文件：</span><a href='https://github.com/specialCoder/cdn/blob/main/public/jquery/jquery.min.js' target='_blank' class='url'>https://github.com/specialCoder/cdn/blob/main/public/jquery/jquery.min.js</a></p><figure><table><thead><tr><th><span>描述</span></th><th><span>内容</span></th></tr></thead><tbody><tr><td><span>用户名</span></td><td><span>specialCoder</span></td></tr><tr><td><span>仓库名</span></td><td><span>cdn</span></td></tr><tr><td><span>relaese版本号</span></td><td><span>0.1.3</span></td></tr><tr><td><span>文件路径</span></td><td><span>/public/jquery/jquery.min.js</span></td></tr></tbody></table></figure><h5><a name="其他使用方法" class="md-header-anchor"></a><span>其他使用方法</span></h5><p><span>以 jquery 为例子：</span><a href='https://link.segmentfault.com/?enc=5aiZkwGBYZHZmLFbgMuecA%3D%3D.iAYYW30%2F%2FGasMjybT7prxKCGOPMD%2BzM%2BxSA78jYQazY5NB6SOD638bEbKV3hfte7'><span>https://github.com/jquery/jquery</span></a></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 使用版本范围而不是特定版本</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery@3.2/dist/jquery.min.js &nbsp; https://cdn.jsdelivr.net/gh/jquery/jquery@3/dist/jquery.min.js</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 完全省略该版本以获取最新版本</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 将“.min”添加到任何JS/CSS文件中以获取缩小版本，如果不存在，将为会自动生成</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/src/core.min.js</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> </span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 240px;"></div><div class="CodeMirror-gutters" style="display: none; height: 240px;"></div></div></div></pre><h4><a name="其他用法" class="md-header-anchor"></a><span>其他用法</span></h4><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang=""><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 加载任何Github发布、提交或分支</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/user/repo@version/file</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">// 在末尾添加 / 以获取资源目录列表（返回以html文件，页面中展示列表）</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">https://cdn.jsdelivr.net/gh/jquery/jquery/</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 120px;"></div><div class="CodeMirror-gutters" style="display: none; height: 120px;"></div></div></div></pre><h3><a name="github-部分" class="md-header-anchor"></a><span>github 部分</span></h3><p><span>通过上面我们知道了 jsDelivr 可以加载 github release 下的内容，接下来我们需要：</span></p><ol start='' ><li><span>创建 github cdn 仓库</span></li><li><span>发布版本</span></li><li><span>实现 push 的时候自动发布版本</span></li></ol><h4><a name="创建-github-cdn-仓库" class="md-header-anchor"></a><span>创建 github cdn 仓库</span></h4><p><span>访问 </span><a href='https://link.segmentfault.com/?enc=pE1QLr26%2Bp90qaBtIQvGJA%3D%3D.r59qhBgvHo1Q1DlAMBpjcL71OGcYIcAppBBIbmYBzKk%3D'><span>https://github.com/</span></a><span> 创建，目前创建 public 仓库获取文件是没有问题的（private 仓库还没试过）。</span><br/><span>然后把仓库代码克隆到本地，往仓库里添加你需要的文件，然后提交到远程即可。</span></p><h4><a name="发布版本" class="md-header-anchor"></a><span>发布版本</span></h4><p><span>tag 与 release 【待补充】</span></p><p><span>在仓库主页，点击右边区域 Release 按钮：</span><br/><img src="https://segmentfault.com/img/bVcXK8J" referrerpolicy="no-referrer"></p><p><span>点击 「创建一个新的 relaese」:</span><br/><img src="https://segmentfault.com/img/bVcXK8I" referrerpolicy="no-referrer"></p><p><span>创建 release：</span><br/><img src="https://segmentfault.com/img/bVcXK8W" referrerpolicy="no-referrer"></p><ul><li><span>choose tag: 选择一个已经存在的tag或者新建一个，关于 </span><a href='https://link.segmentfault.com/?enc=IrzuyhOPpJdHhALXjhcYFA%3D%3D.FlO0s%2Bnz42iO8EwZtHfwZVWghXZsNn%2BAXFU3SQJYp%2BScD%2BvpsXFQDZQTa9EceHfJLrCcAzy6tA%2Bi7aGJ0sHF9fKXf3MBXz91ohKXpmjrM%2Ft4Y8%2BahGyvYlMK8HC7Ex60'><span>git tag</span></a></li><li><span>target: 选择一个分支或者一次提交。建议选择主分支</span></li><li><span>title: 输入 title，会显示在版本列表中</span></li><li><span>description: 输入版本描述</span></li><li><span>Attach files: 忽略</span></li><li><span>pre-release: 发布测试版版本的时候可以勾选</span></li></ul><p><span>输入完毕然后选择 「Publish relasese」就可以了。</span></p><h4><a name="自动发布" class="md-header-anchor"></a><span>自动发布</span></h4><p><span>使用 github action 来实现自动发布：</span></p><ul><li><span>mian 分支有提交的时候就会发布</span></li><li><span>使用 package.json 里面的 verison 控制 tag 和 版本号（tag 与 版本号一致）</span></li><li><span>每次都发布正式版本</span></li></ul><p><code>.github/workflow/publish.yml</code><span> 内容:</span></p><pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" style="break-inside: unset;"><div class="CodeMirror cm-s-inner CodeMirror-wrap" lang=""><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 0px; left: 12px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 0px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: 0px; width: 0px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">name: release CI</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">on:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">  push:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  branches:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;  - main</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">jobs:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">  build:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  runs-on: ubuntu-latest</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  steps:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;  - name: Checkout</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp;  uses: actions/checkout@v2</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span cm-text="">​</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;  - name: 读取当前版本号</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp;  id: version</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp;  uses: ashley-taylor/read-json-property-action@v1.0</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp;  with:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;  path: ./package.json</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;  property: version</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;  - name: Release</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp;  uses: actions/create-release@master</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp;  env:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp;  with:</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;  tag_name: v${{steps.version.outputs.value}}</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;  release_name: v${{steps.version.outputs.value}}</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;  body: Release v${{steps.version.outputs.value}}</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;  draft: false</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;  prerelease: false</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 696px;"></div><div class="CodeMirror-gutters" style="display: none; height: 696px;"></div></div></div></pre><p><span>至此，github部分完成。</span></p><p>&nbsp;</p><h2><a name="总结" class="md-header-anchor"></a><span>总结</span></h2><p><span>我们实现了自制CDN，并且可以自动发版。这样就可以愉快的使用了～～</span><br/><span>思考🤔 如何把它做成一个接口？？这样我们在文件需求较少的时候就省去了购买 文件存储的花销。</span></p><h2><a name="参考" class="md-header-anchor"></a><span>参考</span></h2><ul><li><a href='https://zhuanlan.zhihu.com/p/76951130'><span>免费CDN：jsDelivr+Github 使用方法</span></a></li></ul><p>&nbsp;</p></div>
</body>
</html>